<template>
  <Dialog title="取消订单" v-model:visible="visibleDialog">
    <!-- 组件内容 -->
    <div class="cancel-info">
      <p>取消订单后，本单享有的优惠可能会一并取消，是否继续？</p>
      <p class="tip">请选择取消订单的原因（必选）：</p>
      <div class="btn">
        <a @click="curText = item" v-for="item in cancelReason" :key="item" href="javascript:;"
          :class="{ active: curText === item }">
          {{ item }}
        </a>
      </div>
    </div>

    <!-- 按钮操作 -->
    <template #footer>
      <Button type="gray" @click="visibleDialog = false" style="margin-right: 20px">取消</Button>
      <Button type="primary" @click="submit">确认</Button>
    </template>
  </Dialog>
</template>

<script>
import { ref } from "vue";
import { cancelReason } from "@/api/constants";
import Message from "@/components/library/Message";
import { cancelOrder } from "@/api/order";

export default {
  name: "OrderCancel",
  setup(props) {
    // 对话框的展示与隐藏
    const visibleDialog = ref(false);
    // 当前订单信息
    const orderInfo = ref(null);
    // 选中的取消原因
    const curText = ref("");

    // 打开对话框
    const open = (order) => {
      visibleDialog.value = true;
      // 记录订单信息
      orderInfo.value = order;
      console.log(orderInfo.value.id);
      curText.value = "";
    };

    const submit = () => {
      if (!curText.value) return Message({ type: "error", text: "请先选择取消原因" });
      cancelOrder(orderInfo.value.id, curText.value).then((data) => {
        console.log(data);
        // 取消订单成功
        Message({ text: "取消订单成功", type: "success" });
        // 更新订单状态
        orderInfo.value.orderState = 6;
        // 关闭对话框
        visibleDialog.value = false;
      });
    };

    return {
      cancelReason,
      visibleDialog,
      submit,
      curText,
      open,
    };
  },
};
</script>


<style scoped lang="less">
.dialog :deep(.wrapper) {
  width: 620px;
}

.cancel-info {
  p {
    font-size: 16px;
    line-height: 35px;

    &.tip {
      color: #999;
    }
  }

  .btn {
    padding-top: 21px;
    display: flex;
    flex-wrap: wrap;

    a {
      width: 256px;
      height: 45px;
      line-height: 45px;
      text-align: center;
      background-color: #ffffff;
      border: 1px solid #e4e4e4;
      margin-right: 20px;
      margin-bottom: 20px;
      color: #666;

      &:nth-child(2n) {
        margin-right: 0;
      }

      &:hover,
      &.active {
        background-color: #e3f9f4;
        border-color: @xtxColor;
      }
    }
  }
}
</style>